﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Imenik_Projektni_2011
{
    public partial class frmKontakti : Form
    {
        public DataSet ds;
        public OleDbDataAdapter da;
        public OleDbConnection conn = new OleDbConnection();
        public int userId = 0; //Ova promenljiva označava trenutno aktivnog korisnika
        int kontaktID = 0; //selektovani kontakt
        string lokacijaSlike="";
        int scroll = 0; //Promenljiva na osnovu koje se određuje koji će se kontakti prikazati
        int contactCount = 0; // Broj kontakta
        
        List<Kontakt> listaKontakt = new List<Kontakt>();
        string akcija = ""; //Određuje koja će se akija dogoditi klikom na dugme OK

        private void ucitavanjeSvihKontakta()
        {
            
            OleDbCommand cmd = new OleDbCommand("select * from contacts", conn);
            da = new OleDbDataAdapter(cmd);
            ds = new DataSet();
            da.Fill(ds);
            contactCount = Funkcije.returnSingleInt(ds, conn, string.Format(@"select count(*) from contacts where idusers = {0}",userId));
            //Ubacivanje broja kontakta u promenljivu contactCount
        }
        private void refresh() //Osvežavanje liste kontakta sa novim kontaktima
        {
            try
            {
                lblName.Text = listaKontakt[scroll].FullName;
                lblLastname.Text = listaKontakt[scroll].City;
                pbSlika1.ImageLocation = listaKontakt[scroll].Picture;


                lblName1.Text = listaKontakt[scroll + 1].FullName;
                lblLastname1.Text = listaKontakt[scroll + 1].City;
                pbSlika2.ImageLocation = listaKontakt[scroll + 1].Picture;


                lblName2.Text = listaKontakt[scroll + 2].FullName;
                lblLastname2.Text = listaKontakt[scroll + 2].City;
                pbSlika3.ImageLocation = listaKontakt[scroll + 2].Picture;


                lblName3.Text = listaKontakt[scroll + 3].FullName;
                lblLastname3.Text = listaKontakt[scroll + 3].City;
                pbSlika4.ImageLocation = listaKontakt[scroll + 3].Picture;


                lblName4.Text = listaKontakt[scroll + 4].FullName;
                lblLastname4.Text = listaKontakt[scroll + 4].City;
                pbSlika5.ImageLocation = listaKontakt[scroll + 4].Picture;
            }
            catch 
            {
                
                MessageBox.Show("Greska");
            }

            
           
            

        }
        private void izbor(int panelNumber) // U zavisnosti od kliknutog panela, ubacuje vrednosti u kontrole
        {
            lblImePrezime.Text = listaKontakt[panelNumber].FullName;
            txtTelefon.Text = listaKontakt[panelNumber].Phone;
            txtGrad.Text = listaKontakt[panelNumber].City;
            txtFacebook.Text = listaKontakt[panelNumber].Facebook;
            txtYoutube.Text = listaKontakt[panelNumber].Youtube;
            txtEmail.Text = listaKontakt[panelNumber].Email;
            pbSlika.ImageLocation = listaKontakt[panelNumber].Picture;
            kontaktID = listaKontakt[panelNumber].ID;
        }
        private void popunjavanjeListe() //Ubacivanje vrednosti iz baze u kolekciju kontakta
        {
                OleDbCommand cmdKontakt = new OleDbCommand();
                cmdKontakt.Connection = conn;
                cmdKontakt.CommandType = CommandType.Text;
                cmdKontakt.CommandText = string.Format
                    (@"select * from Contacts where idusers = {0}",userId);

                conn.Open();
                OleDbDataReader readerKontakt = cmdKontakt.ExecuteReader();
                listaKontakt = Funkcije.getContacts(readerKontakt); //Popunjavanje kolekcije kontakta
                contactCount = listaKontakt.Count();
                vScroll.Maximum = contactCount - 5; 
                // Maximalna vrednost za pomeranje scrolla ne može biti veća od broja kontatka -5
                conn.Close();
                refresh();
        }

        public frmKontakti()
        {
            InitializeComponent();
        }

        private void frmKontakti_Load(object sender, EventArgs e)
        {
            ucitavanjeSvihKontakta();
            popunjavanjeListe();
        }
               
        private void vScroll_Scroll(object sender, ScrollEventArgs e)
        {
            scroll = vScroll.Value; //Postavljanje scroll na trenutnu vrednost scroll kontrole
            refresh(); // Osvežavanje liste


        }
        private void btnIzmeni_Click(object sender, EventArgs e)
        {

            akcija = "izmeni"; //setivanje akcije na izmeni
            txtTelefon.Enabled = true;
            txtGrad.Enabled = true;
            txtFacebook.Enabled = true;
            txtYoutube.Enabled = true;
            txtEmail.Enabled = true;
            txtImePrezime.Visible = true;
            txtImePrezime.Text = lblImePrezime.Text;
            btnIzmeni1.Visible = true;
            //Omogućavanje unosa u kontrole


        }


        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            panel1.BorderStyle = BorderStyle.Fixed3D; //Vizuelni efekat klikom na miša
            izbor(scroll); //ubacijemo vrednosti scroll (prvog kontakta)
            
            
        }

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
            panel1.BorderStyle = BorderStyle.None; //Otpuštanjem miša, vraća se normalni efekat panela
        }   
        
       

        private void panel2_MouseDown(object sender, MouseEventArgs e)
        {
            panel2.BorderStyle = BorderStyle.Fixed3D;
            izbor(scroll + 1);//ubacijemo vrednosti scroll+1 (drugog kontakta)
        }

        private void panel2_MouseUp(object sender, MouseEventArgs e)
        {
            panel2.BorderStyle = BorderStyle.None;
        }

        private void panel3_MouseDown(object sender, MouseEventArgs e)
        {
            panel3.BorderStyle = BorderStyle.Fixed3D;
            izbor(scroll+2);
        }

        private void panel3_MouseUp(object sender, MouseEventArgs e)
        {
            panel3.BorderStyle = BorderStyle.None;
        }

        private void panel4_MouseDown(object sender, MouseEventArgs e)
        {
            panel4.BorderStyle = BorderStyle.Fixed3D;
            izbor(scroll+3);
        }

        private void panel4_MouseUp(object sender, MouseEventArgs e)
        {
            panel4.BorderStyle = BorderStyle.None;
        }

        private void panel5_MouseUp(object sender, MouseEventArgs e)
        {
            panel5.BorderStyle = BorderStyle.None;
        }

        private void panel5_MouseDown(object sender, MouseEventArgs e)
        {
            panel5.BorderStyle = BorderStyle.Fixed3D;
            izbor(scroll+4);
        }

        private void pbSlika_Click(object sender, EventArgs e)
        {
            DialogResult a = ofda.ShowDialog(); //Otvaranje file dialoga
            
            if (a == DialogResult.OK)
            {
                Image slika = Image.FromFile(ofda.FileName); 
                //Kreiranje objekta Image i ubacivanje izabrane slike njega.

                slika.Save(string.Format(@"..\..\Slike\contacts\{0}.jpg", kontaktID));
                //Čuvanje slike u folder sa slikama kontakta

                pbSlika.Image = slika;
                //Ubacivanje slike u picture box, i njeno prikazivanje

                lokacijaSlike = ofda.FileName;
                

                for (int i = 0; i < listaKontakt.Count; i++)
                {
                    if (listaKontakt[i].ID == kontaktID) //Ubacivanje slike u selektovani kontakt
                    {
                        listaKontakt[i].Picture = lokacijaSlike;
                    }
                }
                 

            }
        }

        private void btnIzmeni1_Click(object sender, EventArgs e)
        {
            if (akcija == "izmeni")
            {
                string commanda = string.Format
                (@"update contacts 
                    set fullname = '{0}', phone = '{1}', city = '{2}', facebook = '{3}', youtube = '{4}', picture = '{5}', email = '{6}', notes = '{7}'
                    where id = {8}"
                , txtImePrezime.Text, txtTelefon.Text, txtGrad.Text, txtFacebook.Text, txtYoutube.Text, pbSlika.ImageLocation, txtEmail.Text, txtNapomena.Text, kontaktID);
                ds = Funkcije.update(ds, conn, commanda); //Izmena selektovanog kontakta

                //Postavljanje kontrola na disabled
                txtTelefon.Enabled = false;
                txtGrad.Enabled = false;
                txtFacebook.Enabled = false;
                txtYoutube.Enabled = false;
                txtEmail.Enabled = false;
                txtImePrezime.Visible = false;
                txtImePrezime.Text = lblImePrezime.Text;
                btnIzmeni1.Visible = false;
                refresh();
                popunjavanjeListe();
            }
            if (akcija == "novi")
            {
                int noviID = Funkcije.getAvailableID(ds, conn);
                string [] podaci = new string [10] {noviID.ToString(), userId.ToString(), txtImePrezime.Text, txtTelefon.Text, txtGrad.Text, txtFacebook.Text, txtYoutube.Text, lokacijaSlike, txtEmail.Text, txtNapomena.Text};
               
                Funkcije.addContact(ref ds, conn, podaci, noviID.ToString(), "id");
                //Ubacivanje novog kontakta

                //Postavljanje kontrola na disabled
                txtTelefon.Enabled = false;
                txtGrad.Enabled = false;
                txtFacebook.Enabled = false;
                txtYoutube.Enabled = false;
                txtEmail.Enabled = false;
                txtImePrezime.Visible = false;
                txtImePrezime.Text = lblImePrezime.Text;
                btnIzmeni1.Visible = false;               
                refresh();
                popunjavanjeListe();
            }

        }

        private void btnObrisi_Click(object sender, EventArgs e)
        { 
            if (listaKontakt.Count>5) // Onemogucavanje brisanja kontakta ako ih ima manje od 5
            { 
                ds = Funkcije.delete(ds, conn, string.Format(@"delete from contacts where id = {0}", kontaktID), kontaktID.ToString(), "ID");
                scroll = 0;
                ucitavanjeSvihKontakta();
                popunjavanjeListe();
            }
            else
            {
                MessageBox.Show("Kontakt ne moze biti obrisan");
                return;
            }
        }


        private void btnNovi_Click(object sender, EventArgs e)
        {
            akcija = "novi"; //Postavljane akcije na novi
            txtTelefon.Enabled = true;
            txtGrad.Enabled = true;
            txtFacebook.Enabled = true;
            txtYoutube.Enabled = true;
            txtEmail.Enabled = true;
            txtImePrezime.Visible = true;
            txtImePrezime.Text = lblImePrezime.Text;
            btnIzmeni1.Visible = true;
            //Omogućavanje unosa podataka u kontrole
        }

       

      
    }
}
